package com.music.service.impl;

import com.laoxuai.beans.annotation.Autowired;
import com.laoxuai.beans.annotation.Service;
import com.laoxuai.ibatis.util.Example;
import com.laoxuai.ibatis.util.PageInfo;

import com.laoxuai.util.StringUtils;
import com.music.dao.TagDao;
import com.music.pojo.Tag;
import com.music.service.TagService;

import java.sql.Date;
import java.sql.SQLException;
import java.util.List;

@Service
public class TagServiceImpl implements TagService {

    @Autowired
    private TagDao tagDao;

    @Override
    public int insert(Tag tag) {
        // 类型
        tag.setType("-1");
        // 创建时间
        tag.setCreateTime(new Date(new java.util.Date().getTime()));
        // 修改时间
        tag.setUpdateTime(new Date(new java.util.Date().getTime()));
        // 状态
        tag.setIsDeleted(1);
        try {
            // 输入的标签名不为空
            if (StringUtils.isNotEmpty(tag.getName())) {
                // 输入的标签名不存在
                if (tagDao.getByName(tag.getName()) == null) {
                    return tagDao.insert(tag);
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    @Override
    public int delete(Integer id) {
        if (StringUtils.isNotEmpty(id)) {
            try {
                return tagDao.delete(id);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return 0;
    }

    @Override
    public int update(Tag tag) {
        if (StringUtils.isNotEmpty(tag.getId())) {
            if (StringUtils.isNotEmpty(tag.getName())) {
                try {
                    // 修改后的标签名不存在，才能进行修改
                    Tag tag1 = tagDao.getByName(tag.getName());
                    if (tag.getName().equals(tag1.getName())) {
                        return tagDao.update(tag);
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return 0;
    }

    @Override
    public Tag getByPrimaryKey(Integer id) {
        if (StringUtils.isNotEmpty(id)) {
            try {
                return tagDao.getByPrimaryKey(id);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    @Override
    public List<Tag> listPage(Tag tag, int page, int size) {
        try {
            return tagDao.listPage(tag, page, size);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    @Override
    public PageInfo<Tag> listPageInfo(Tag tag, int page, int size) {
        try {
            return tagDao.listPageInfo(tag, page, size);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public List<Tag> selectByExample(Tag tag) {
        Example example = createExmaple(tag);
        try {
            return tagDao.selectByExample(example);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    @Override
    public List<Tag> selectAll() {
        try {
            return tagDao.selectAll();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    private Example createExmaple(Tag tag) {
        Example example = new Example(Tag.class);
        Example.Criteria criteria = example.createCriteria();
        // TODO
        if (tag != null) {
            if (!StringUtils.isEmpty(tag.getId())) {
                criteria.andEqualTo("id", tag.getId());
            }
            if (!StringUtils.isEmpty(tag.getName())) {
                criteria.andLike("name", "%" + tag.getName() + "%");
            }
            if (!StringUtils.isEmpty(tag.getType())) {
                criteria.andEqualTo("type", tag.getType());
            }
            if (!StringUtils.isEmpty(tag.getCategory())) {
                criteria.andEqualTo("category", tag.getCategory());
            }
            if (!StringUtils.isEmpty(tag.getUsedCount())) {
                criteria.andEqualTo("usedCount", tag.getUsedCount());
            }
            if (!StringUtils.isEmpty(tag.getCreateTime())) {
                criteria.andEqualTo("createTime", tag.getCreateTime());
            }
            if (!StringUtils.isEmpty(tag.getUpdateTime())) {
                criteria.andEqualTo("updateTime", tag.getUpdateTime());
            }
            if (!StringUtils.isEmpty(tag.getIsDeleted())) {
                criteria.andEqualTo("isDeleted", tag.getIsDeleted());
            }
        }
        return example;
    }

    /**
     * Tag 构建查询对象
     *
     * @param tag
     * @return
     */
    public Example createExample(Tag tag) {
        Example example = new Example(Tag.class);
        Example.Criteria criteria = example.createCriteria();
        if (tag != null) {
            if (!StringUtils.isEmpty(tag.getId())) {
                criteria.andEqualTo("id", tag.getId());
            }
            if (!StringUtils.isEmpty(tag.getName())) {
                criteria.andLike("name", "%" + tag.getName() + "%");
            }
            if (!StringUtils.isEmpty(tag.getType())) {
                criteria.andEqualTo("type", tag.getType());
            }
            if (!StringUtils.isEmpty(tag.getCategory())) {
                criteria.andEqualTo("category", tag.getCategory());
            }
            if (!StringUtils.isEmpty(tag.getUsedCount())) {
                criteria.andEqualTo("usedCount", tag.getUsedCount());
            }
            if (!StringUtils.isEmpty(tag.getCreateTime())) {
                criteria.andEqualTo("createTime", tag.getCreateTime());
            }
            if (!StringUtils.isEmpty(tag.getUpdateTime())) {
                criteria.andEqualTo("updateTime", tag.getUpdateTime());
            }
            if (!StringUtils.isEmpty(tag.getIsDeleted())) {
                criteria.andEqualTo("isDeleted", tag.getIsDeleted());
            }
        }
        return example;
    }
}
